home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus Special 25
/
AMIGAplus Sonderheft 25 (2000)(Falke)(DE)(Track 1 of 4)[!].iso
/
Updates
/
HD-Installer
/
jst_dev
/
sources
/
src
/
loaders
/
Immortal
/
immortalhd.asm
< prev
next >
Wrap
Assembly Source File
|
2000-04-12
|
3KB
|
198 lines
; *** Written by Jean-François Fabre
include "jst.i"
HD_PARAMS "immortal.d",STD_DISK_SIZE,2 ; JST loader parameters
SET_VARZONE startvar,endvar ; snapshot saved variables
loader:
RELOC_MOVEL D0,trainer
move.l #$80000,D0
JSRABS AllocExtMem
RELOC_MOVEL D0,ExtBase
beq MemErr
Mac_printf "Immortal HD Loader V1.1a"
Mac_printf "Coded by Jean-François Fabre © 1998"
RELOC_TSTL trainer
beq skip$
NEWLINE
Mac_printf "Trainer activated"
skip$
JSRABS LoadDisks
moveq.l #0,D0
move.l #CACRF_CopyBack,D1
JSRABS Degrade
; WAIT_LMB
GO_SUPERVISOR
SAVE_OSDATA $80000
JSRGEN FreezeAll
move #$2700,SR
lea $DFF000,A6
MOVE #$7FFF,154(A6) ;0EC: 3D7C7FFF009A
MOVE #$7FFF,156(A6) ;0F2: 3D7C7FFF009C
MOVE #$8640,150(A6) ;0F8: 3D7C86400096
bsr InstallBoot
sub.l A0,A0
sub.l A1,A1
; **** boot stuff and patch
JSRGEN FlushCachesHard
move.l ExtBase(pc),D0
jmp $10000
PatchLoader1:
PATCHUSRJMP $5A5C.W,ReadSectors
move.w #$4E75,$620A.W
PATCHUSRJSR $26970,KbInt
PATCHUSRJSR $26990,Delay
move.w #$4E71,$2698E
PATCHUSRJSR $2462A,WaitD6
PATCHUSRJSR $24642,WaitD6
PATCHUSRJSR $2465A,WaitD6
PATCHUSRJMP $D6.W,StoreCop
move.l #$4EB800D6,$24754
JSRGEN FlushCachesHard
add.l #$145F6,A0
nop
nop
jmp (A0)
nop
nop
StoreCop:
move.l A1,$DFF080
move.l A1,$E0
move.l D0,-(A7)
move.l A1,D0
JSRGEN StoreCopperPointer
move.l (A7)+,D0
rts
WaitD6:
move.l D0,-(sp)
moveq #0,D0
move.w D6,D0
divu.w #$30,D0
swap D0
clr.w D0
swap D0
BEAM_DELAY D0
move.l (sp)+,D0
rts
InstallBoot:
moveq #0,D0
move.l #$20000,D1
move.l #$A2C00,D2
lea $10000,A0
JSRGEN ReadDiskPart
PATCHUSRJMP $11348,PatchLoader1
move.w #$6006,$11322 ; remove a poke in ROM ????
rts
ReadSectors:
movem.l A0/D0-D2,-(a7)
and.w #$FFFF,D1
and.w #$FFFF,D2
moveq #0,D0
cmp.w #2,D1
bne.b load$
cmp.w #2,D2
bne.b load$
move.l diskcount(pc),D0
cmp.l #2,D0
beq load$
RELOC_ADDL #1,diskcount
; remove the protection
move.b #$22,$101C5
move.b #$04,$1043C
move.w #$0B38,$1F770
load$
move.l diskcount(pc),D0
cmp.l #2,D0
beq disk2$
moveq #0,D0
bra.b call$
disk2$
moveq.l #1,D0
call$
cmp.w #$370,D1
bcs read$ ; normal if D1 below $370
add.l #22,D1 ; skips 2 tracks if D1 above $370
read$
JSRGEN ReadRobSectors
movem.l (a7)+,A0/D0-D2
moveq #0,D0
rts
KbInt:
move.b $BFEC01,D0
move.l D0,-(A7)
ror.b #1,D0
not.b D0
cmp.b #$59,D0 ; F10
bne noquit$
JSRGEN InGameExit
noquit$
cmp.b #$42,D0 ; TAB key
bne noicon$
JSRGEN InGameIconify
move.w #$4200,$DFF100 ; set proper bpl control ( HRTMon does not restore
; the display right unless you type e $100 $4200 )
move.w ($DFF088),D0 ; reactivate
noicon$
move.l (a7)+,D0
rts
Delay:
move.l D0,-(sp)
move.w #$12C,D0
divu.w #$28,D0
swap D0
clr.w D0
swap D0
JSRGEN BeamDelay
move.l (sp)+,D0
rts
MemErr:
Mac_printf "** Not enough memory to run Immortal!"
JMPABS CloseAll
startvar:
diskcount:
dc.l 0 ; this variable is saved by JST snapshot
endvar:
trainer:
dc.l 0
ExtBase:
dc.l 0